package org.dromara.business.mongoMapper;

import org.dromara.business.domain.Events;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import java.math.BigInteger;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

@Repository
public interface EventsMongoRepository extends MongoRepository<Events, String> {

    // 根据 eventId 查询
    Optional<Events> findByEventId(String eventId);

    // 根据状态查询
    List<Events> findByStatus(String status);

    // 根据交易哈希查询
    @Query("{ 'data.sourceTxHash': ?0 }")
    List<Events> findBySourceTxHash(String sourceTxHash);

    // 根据链类型查询
    @Query("{ 'data.sourceChain': ?0 }")
    List<Events> findBySourceChain(String sourceChain);

    // 根据区块号范围查询
    List<Events> findByBlockNumberBetween(BigInteger start, BigInteger end);

    // 根据发送者地址查询
    @Query("{ 'data.sender': ?0 }")
    List<Events> findBySender(String sender);

    // 根据接收者地址查询
    @Query("{ 'data.recipient': ?0 }")
    List<Events> findByRecipient(String recipient);

    // 根据状态和链类型查询
    @Query("{ 'status': ?0, 'data.sourceChain': ?1 }")
    List<Events> findByStatusAndSourceChain(String status, String sourceChain);

    // 统计 pending 状态的事件数量
    long countByStatus(String status);

    @Query("{ 'createdAt': { $gte: ?0, $lt: ?1 } }")
    List<Events> findEventsByCreatedAtBetween(LocalDateTime startTime, LocalDateTime endTime);

    // 查询createdAt在start和end之间的数据
    List<Events> findByCreatedAtBetween(LocalDateTime start, LocalDateTime end);

    @Override
    List<Events> findAll();
}
